package com.yyb.mapper;

import com.yyb.domain.SysRole;
import com.yyb.dto.SysRoleQueryDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author LJH
* @description 针对表【sys_role(角色信息表)】的数据库操作Mapper
* @createDate 2024-02-28 20:27:28
* @Entity com.yyb.domain.SysRole
*/
public interface SysRoleMapper {

    int deleteByPrimaryKey(Long id);

    int insert(SysRole record);

    int insertSelective(SysRole record);

    SysRole selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(SysRole record);

    int updateByPrimaryKey(SysRole record);

    /**
     * 根据条件查询角色
     * @param params
     * @return
     */
    List<SysRole> queryAllRole(@Param("params") SysRoleQueryDTO params);

    /**
     * 根据用户ID和条件查询角色数据
     * @param params
     * @param userId
     * @return
     */
    List<SysRole> queryAllRoleByUserId(@Param("params") SysRoleQueryDTO params, @Param("userId") Long userId);

    /**
     * 根据roleId删除sys_user_role里面数据
     * @param roleId
     */
    void deleteUserRoleByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据roleId删除sys_role_menu里面的数据
     * @param roleId
     */
    void deleteRoleMenuByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据userId删除sys_user_role里面数据
     * @param userId
     */
    void deleteUserRoleByUserId(@Param("userId") Long userId);

    /**
     * 根据menuId删除sys_role_menu里面的数据
     * @param menuId
     */
    void deleteRoleMenuByMenuId(@Param("menuId") Long menuId);

    /**
     * 根据角色ID查询当前角色拥有的权限菜单ID
     * @param roleId
     * @return
     */
    List<Long> queryCurrentRoleHasMenuIdsByRoleId(@Param("roleId") Long roleId);

    /**
     * 保存角色菜单之间的关系
     * @param roleId
     * @param menuIds
     */
    void saveRoleMenu(@Param("roleId") Long roleId, @Param("menuIds") List<Long> menuIds);

    /**
     * 根据用户ID查询用户拥有的角色
     * @param userId
     * @return
     */
    List<SysRole> queryRolesByUserId(@Param("userId") Long userId);

    /**
     * 保存用户和角色之间的关系
     * @param userId
     * @param roleIds
     */
    int saveUserRoles(@Param("userId") Long userId, @Param("roleIds") List<Long> roleIds);
}
